﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;
using Microsoft.Reporting.WinForms;
using System.Windows.Forms.Integration;

namespace CapaPresentacion.Controles
{
    class ReporteGastosViewModel
    {

        public event ReiniciarCU ReiniciarCU;

        private RelayCommand reporteGastosMesCommand;
        
        ReporteGastos view;

        Guid idCicloLectivo;
        string mes;
        
        public List<ViewEntity> ListaCiclos{ get; set; }
        public List<ViewEntity> ListaMeses { get; set; }

        public Guid IdCicloLectivo
        {
            get
            {
                return idCicloLectivo;
            }
            set
            {
                idCicloLectivo = value;

            }
        }


        public string Mes
        {
            get
            {
                return mes;
            }

            set
            {
                mes = value;

            }
        }


        public ICommand ReporteGastosMesCommand
        {
            get
            {
                return reporteGastosMesCommand;
            }
        }

        public ReporteGastosViewModel() { }

        public void Inicializar(ReporteGastos vista)
        {
            this.view = vista;

            ListaCiclos = new CicloLectivoLogica().ObtenerEntidades();

            if (ListaCiclos.Count > 0 && ListaCiclos != null)
            {               

                ListaMeses = new List<ViewEntity>();
                ListaMeses.Add(new ViewEntity("- Todos -"));
                ListaMeses.Add(new ViewEntity("Enero"));
                ListaMeses.Add(new ViewEntity("Febrero"));
                ListaMeses.Add(new ViewEntity("Marzo"));
                ListaMeses.Add(new ViewEntity("Abril"));
                ListaMeses.Add(new ViewEntity("Mayo"));
                ListaMeses.Add(new ViewEntity("Junio"));
                ListaMeses.Add(new ViewEntity("Julio"));
                ListaMeses.Add(new ViewEntity("Agosto"));
                ListaMeses.Add(new ViewEntity("Septiembre"));
                ListaMeses.Add(new ViewEntity("Octubre"));
                ListaMeses.Add(new ViewEntity("Noviembre"));
                ListaMeses.Add(new ViewEntity("Diciembre"));
                
                reporteGastosMesCommand = new RelayCommand(GenerarReporteGastosMes);

            }
            else
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No se han encontrado ciclos lectivos");
                nueva.ShowDialog();
                this.ReiniciarCU(CasosDeUso.NuevoCicloLectivo);

            }
           
        }


        private void GenerarReporteGastosMes(Object parameter)
        {
            if(ValidacionesReporteGastosMes())
            {

                CicloLectivo ciclo = new CicloLectivoLogica().ObtenerEntidad(idCicloLectivo);

                InformeGastos cuotas = new InformeLogica().ObtenerTotalCuotas(mes, ciclo.FechaDesde.Value.Year);
                InformeGastos inscripciones = new InformeLogica().ObtenerTotalInscripciones(mes, ciclo.IdCicloLectivo);

                InformeGastos[] informeCuotas = new InformeGastos[] { cuotas };
                InformeGastos[] informeInscripciones = new InformeGastos[] { inscripciones };


                List<InformeGastos> gastos = new InformeLogica().ObtenerTotalGastos(mes, ciclo.FechaDesde.Value.Year);

                this.view.rvGastos.ProcessingMode = ProcessingMode.Local;

                this.view.rvGastos.LocalReport.DataSources.Clear();
                this.view.rvGastos.LocalReport.DataSources.Add(new ReportDataSource("ConjuntoDatosPagoCuotas", informeCuotas));
                this.view.rvGastos.LocalReport.DataSources.Add(new ReportDataSource("ConjuntoDatosPagoInscripciones", informeInscripciones));
                this.view.rvGastos.LocalReport.DataSources.Add(new ReportDataSource("ConjuntoDatosGastosPagos", gastos));

                this.view.rvGastos.LocalReport.ReportEmbeddedResource = "CapaPresentacion.Controles.ReporteGastos.rdlc";
                this.view.rvGastos.ShowBackButton = false;
                this.view.rvGastos.ShowRefreshButton = false;

                List<ReportParameter> parameters = new List<ReportParameter>();

                parameters.Add(new ReportParameter("CicloLectivoParameter", ciclo.NombreCicloLectivo));
                parameters.Add(new ReportParameter("MesParameter", mes));

                this.view.rvGastos.LocalReport.SetParameters(parameters);
                this.view.rvGastos.RefreshReport();

                this.view.spReporte.Visibility = Visibility.Visible;





            }
        }



        internal bool ValidacionesReporteGastosMes()
        {

            if (idCicloLectivo == Guid.Empty || idCicloLectivo == null)
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe seleccionar un ciclo lectivo");
                nueva.ShowDialog();
                return false;
            }

            if (String.IsNullOrWhiteSpace(this.mes))
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe seleccionar un mes");
                nueva.ShowDialog();
                return false;
            }


            return true;
        }






    }
}
